package com.dylan.link;

public class LinkBitSum {
    /****
     *给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
     *
     * 如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。
     *
     * 您可以假设除了数字 0 之外，这两个数都不会以 0 开头。
     * 例如：
     * 输入：(2 -> 4 -> 3) + (5 -> 6 -> 4)
     * 输出：7 -> 0 -> 8
     * 原因：342 + 465 = 807
     * */

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

        ListNode result = new ListNode(0);
        ListNode p = l1, q=l2, curr = result;
        // 进位数
        int step = 0 ;
        int z = 0;
        while(p!=null || q!=null){
//            System.out.println("++++++++++++++++++");
            int x = (p==null)? 0:p.val;
            int y = (q==null)? 0:q.val;
            int sum = x+y+step ;
            step = sum/10 ;
            //当前位数据
            z =  sum%10  ;
            curr.next= new ListNode(z);
//            System.out.println("-----"+sum+"---------");
//            System.out.println("-----"+z+"---------");
            curr = curr.next;

            if(p!=null){
                p=p.next;
            }
            if(q!=null){
                q=q.next;
            }
        }
        if(step != 0){
            curr.next= new ListNode(step);
            curr = curr.next;
        }

        return result.next;

    }

}
